package lq.common.configure;

import lq.common.handler.StudyAccessDeniedHandler;
import lq.common.handler.StudyAuthExceptionEntryPoint;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;

/**
 * @program: cloud-study
 * @description: 使用自动装配的实现@Enable模块驱动
 * 将类装配到类中,解决普通maven项目无法在各个微服务系统中无法注入IOC容器的问题
 * @author: LQ
 * @create: 2020-09-29 17:40
 */

public class StudyAuthExceptionConfigure {

    /**
     * 注册StudyAuthExceptionEntryPoint
     * 注册后方便后续实现@Eable的模块驱动
     * @ConditionalOnMissingBean 当IOC容器中没有指定名称或类型的Bean的时候，就注册它
     * 当微服务系统的Spring IOC容器中没有名称为accessDeniedHandler的Bean的时候，
     * 就将FebsAccessDeniedHandler注册为一个Bean。
     * 这样做的好处在于，子系统可以自定义自己的资源服务异常处理器，
     * 覆盖我们在通用模块里定义的。
     * @return
     */
    @Bean
    @ConditionalOnMissingBean(name = "accessDeniedHandler")
    public StudyAccessDeniedHandler accessDeniedHandler() {
        return new StudyAccessDeniedHandler();
    }

    /**
     * 注册StudyAuthExceptionEntryPoint
     * @return
     */
    @Bean
    @ConditionalOnMissingBean(name = "authenticationEntryPoint")
    public StudyAuthExceptionEntryPoint authenticationEntryPoint() {
        return new StudyAuthExceptionEntryPoint();
    }
}
